
var nodes = new Array();

var treeOK=false;
    
function getHighestId(){
    var max=Math.max.apply(Math,nodes);
    if(!isFinite(max)){
        max=0;
    }
    return max;
}	

function getHighestActionId(idx){
    var actionHighestId=-1;
    $('#node'+idx+'actions tr').each(function(index){
        if(actionHighestId < parseInt($(this).children('.action').text())){
            actionHighestId = parseInt($(this).children('.action').text());
        }
    });	
    return actionHighestId;
}

function TreeExcUpdate(event){
    var n=new Array();
    for(var i=1;i<=getHighestId();i++){
			
        if($('#node'+i+'td1').text()!=""){
				
            switch($('#node'+i+'type').val()){
                case "0":
                case "1":
                    var player='';
                    player+=$('#node'+i+'type').val();
                    player+='%'+$('#node'+i+'td1').text();
                    player+='%'+$('#node'+i+'group').val();
                    for(var j=1;j<=getHighestActionId(i);j++){
                        if($('#node'+i+'action'+j).text()!=""){
                            player+='%'+$('#node'+i+'label'+j).val();
                            player+='%'+$('#node'+i+'value'+j).val();
                        }			
                    }
                    n.push(player);
                    break;				
                case "2":
                    var nature='';
                    nature+=$('#node'+i+'type').val();
                    nature+='%'+$('#node'+i+'td1').text();
                    for(var j=1;j<=getHighestActionId(i);j++){
                        if($('#node'+i+'action'+j).text()!=""){
                            nature+='%'+$('#node'+i+'label'+j).val();
                            nature+='%'+$('#node'+i+'probability'+j).val();
                            nature+='%'+$('#node'+i+'value'+j).val();
                        }
                    }						
                    n.push(nature);						
                    break;				
                case "3":
                    var point='';
                    point+=$('#node'+i+'type').val();
                    point+='%'+$('#node'+i+'td1').text();
                    point+='%'+$('#node'+i+'points1').val();
                    point+='%'+$('#node'+i+'points2').val();						
                    n.push(point);
                    break;				
            }
        }
    }
		
		
    $.ajax({
        type: 'POST',
        async:false,
        url: $('#tree_form').attr('action'),
        data:{
            nodes:n,
            idr:$('#info_id_rule').html(),
            freepts:$('#info_free_pts').html(),
            endv:$('#info_end_value').html(),
            ends:$('#info_end_type').html(),
            name:$('#info_rule_name').html(),
            type:1,
            label1:$('#info_label1').html(),
            label2:$('#info_label2').html(),
            wintype:$('#info_win_type').html()
        },
        success: function(data){
            alert(data);
        }
    });
    event.preventDefault();
}
$(document).ready(function(){

    var label1=$("#info_label1").html();
    var label2=$("#info_label2").html();
    var count=$("#info_count").html();  
    
    $('#tree').html('<table id="tree_table" class="content_table" style="border:1px solid black"><colgroup style="width:48px" /><colgroup style="width:112px" /><colgroup style="width:110px" /><colgroup style="width:80px" /><colgroup style="width:80px" /><colgroup style="width:*" /><colgroup style="width:64px" /><tr id="header"><td>#</td><td>Typ</td><td colspan="4" >Parametry węzła</td><td></td></tr></table>');

    for(i_node=0;i_node<count;i_node++){

        //alert($('#info_node'+i_node+'label').html());
        }

    $('#[id$=id]').each(function () {
        var ident=parseInt($(this).html());
        addNode(ident);
        
        $('#node'+ident+'type').val(parseInt($('#info_node'+ident+'type').html()));

        switch(parseInt($('#info_node'+ident+'type').html())){
            case 0:
            case 1:
                
                $('#node'+ident+'td3').html('Zbiór informacyjny:');
                $('#node'+ident+'td4').html('<select id="node'+ident+'group" style="width:50px" title="Wybierz grupę dla węzła">'+getGroups(ident)+'</select>');
                $('#node'+ident+'group').val(parseInt($('#info_node'+ident+'group').html()));
                $('#node'+ident+'td5').html('Akcje:');
                $('#node'+ident+'td6').html('<table id="node'+ident+'actions" class="actions_table"></table><a id="node'+ident+'action_add" class="content_option" href="#" title="Dodaj nową akcję"><img class="option_img" src="/images/iAdd.png">dodaj akcję</a>');

                $('#node'+ident+'action_add').bind('click',function(){
                    addAction(ident,"player");
                    return false;
                });
                
                for(var i=1;i<=parseInt($('#info_node'+ident+'action_count').html());i++){
                    addAction(ident,"player");
                    $('#node'+ident+'label'+i).val($('#info_node'+ident+'action'+(i-1)+'label').html());
                }
                addGroup(ident);
                addActionTarget(ident);
                break;
            case 2:
                
                $('#node'+ident+'td3').html('');
                $('#node'+ident+'td4').html('');						
                $('#node'+ident+'td5').html('Akcje:');
                $('#node'+ident+'td6').html('<table id="node'+ident+'actions" class="actions_table"></table><a id="node'+ident+'action_add" class="content_option" href="#" title="Dodaj nową akcję"><img class="option_img" src="/images/iAdd.png">dodaj akcję</a>');
						
                $('#node'+ident+'action_add').bind('click',function(){
                    addAction(ident,"nature");
                    return false;
                });
                
                for(var i=1;i<=parseInt($('#info_node'+ident+'action_count').html());i++){
                    addAction(ident,"nature");
                    $('#node'+ident+'label'+i).val($('#info_node'+ident+'action'+(i-1)+'label').html());
                    $('#node'+ident+'probability'+i).val($('#info_node'+ident+'action'+(i-1)+'probability').html());
                    
                }
                addActionTarget(ident);
                break;
            case 3:
                $('#node'+ident+'td3').html('');
                $('#node'+ident+'td4').html('');
                $('#node'+ident+'td5').html('Wypłata:');
                $('#node'+ident+'td6').html('1: <input id="node'+ident+'points1" type="text" size="5" title="Wprowadź punkty dla gracza 1" value="0" /> 2:<input id="node'+ident+'points2" type="text" size="5" title="Wprowadź punkty dla gracza 2" value="0" />');
		
                $('#node'+ident+'points1').val($('#info_node'+ident+'points1').html());
                $('#node'+ident+'points2').val($('#info_node'+ident+'points2').html());
                removeGroup(ident);
                addActionTarget(ident);
                break;
        }
                        
    });



    //poprawka akcji docelowych id

    $('#[id$=id]').each(function () {
        var ident=parseInt($(this).html());
        
        $('#node'+ident+'type').val(parseInt($('#info_node'+ident+'type').html()));

        switch(parseInt($('#info_node'+ident+'type').html())){
            case 0:
            case 1:
                for(var i=1;i<=parseInt($('#info_node'+ident+'action_count').html());i++){ 
                    $('#node'+ident+'value'+i).val(parseInt($('#info_node'+ident+'action'+(i-1)+'value').html()));
                }
                break;
            case 2:
                for(var i=1;i<=parseInt($('#info_node'+ident+'action_count').html());i++){
                    $('#node'+ident+'value'+i).val(parseInt($('#info_node'+ident+'action'+(i-1)+'value').html()));  
                }
                addActionTarget(ident);
                break;
        }
                        
    });

    $('#validate_tree').bind('click',function(){
        validateData();
    });
	
        

        
        $('#tree_form').live('submit',function(event) {
        if(!treeOK){
            alert("Należy wygenerować podgląd przed przejściem do następnego kroku.");
            return false;
        }
        
        TreeExcUpdate(event);
        
    });
    
    $('#info').hide();
    
    function addNode(){
        if($('#tree_table tr').size()-1==50){
            alert('Nie można dodać więcej niż 50 węzłów');
            return;
        }

        var idx=getEmptyId();
				
        var nodeCode='<tr id="node'+idx+'"><td id="node'+idx+'td1">'+idx+'</td><td id="node'+idx+'td2"><select id="node'+idx+'type" style="width:100px" title="Wybierz typ węzła"><option value="-1">Wybierz typ</option><option value="0">'+label1+'</option><option value="1">'+label2+'</option><option value="2">Natura</option><option value="3">Wypłata</option></select></td><td id="node'+idx+'td3"><td id="node'+idx+'td4"><td id="node'+idx+'td5"></td><td id="node'+idx+'td6"></td></td><td id="node'+idx+'td7"><a id="node'+idx+'delete" class="content_option" href="#" title="Usuń wybrany węzeł"><img class="option_img" src="/images/iDel.png">usuń</a></td></tr>';
				
        var max=getHighestId();
        for(var i=0;i<=max+1;i++){
            if(i==max+1){
                $('#tree_table').append(nodeCode);
            }
            if(nodes[i] > idx){ 
                $('#node'+nodes[i]).before(nodeCode);
                break;
            }
        }
				
        function sortfunc(a, b)
        {
            return a - b;
        }

        nodes.push(idx);				
        nodes.sort(sortfunc);			

        $('#node_add').unbind('click');
        $('#node_add').bind('click',function(){
            addNode(getEmptyId());
            return false;
        });
        $('#node'+idx+'delete').unbind('click');
        $('#node'+idx+'delete').bind('click',function(){
            removeNode(idx);
            return false;
        });
        $('#node'+idx+'type').unbind('change');				
        $('#node'+idx+'type').bind('change',function(){
            changeNodeType(idx);
            return false;
        });
    }
			
    function getEmptyId(){
        var max=getHighestId();
        for(var i=1;i<=max;i++){
            if(nodes.indexOf(i)==-1){
                return i;
            }
        }
        return max+1;
    }
						
    function removeNode(idx){
        removeGroup(idx);
        $('#node'+idx).remove();
        nodes.splice(nodes.indexOf(idx),1);
        removeActionTarget(idx)
    }
			
    function getGroups(idx){
        var groups = "";
        for(var i=1;i<=getHighestId();i++){
            if($('#node'+i+'td1').text()==idx){ 
                groups += "<option value="+$('#node'+i+'td1').text()+" selected=\"selected\">"+$('#node'+i+'td1').text()+"</option>";
            }
            else if($('#node'+i+'group').text()){
                groups += "<option value="+$('#node'+i+'td1').text()+">"+$('#node'+i+'td1').text()+"</option>";
            }
        }
        return groups;
    }
			
    function removeGroup(idx){
        for(var i=1;i<=getHighestId();i++){
            $('#node'+i+'group option[value="'+idx+'"]').remove();	
        }
    }
			
    function addGroup(idx){
        for(var i=1;i<=getHighestId();i++){
            if(i!=idx){
                if($('#node'+i+'group').size()){
                    for(var j=1;j<=getHighestId();j++){
                        if($('#node'+i+'group option[value='+j+']').val()==idx){
                            return;
                        }
                        if($('#node'+i+'group option[value='+j+']').val()>idx){ 
                            $('#node'+i+'group option[value='+j+']').before('<option value="'+idx+'">'+idx+'</option');	
                            return;
                        }
                    }
                    $('#node'+i+'group').append('<option value="'+idx+'">'+idx+'</option');	
                }
            }
        }
    }
			
    function changeNodeType(idx){
        switch($('#node'+idx+'type').val()){
            case "-1":
                $('#node'+idx+'td3').html('');
                $('#node'+idx+'td4').html('');
                $('#node'+idx+'td5').html('');
                $('#node'+idx+'td6').html('');
						
                removeGroup(idx);
                removeActionTarget(idx);
                break;
            case "0":
            case "1":
                $('#node'+idx+'td3').html('Zbiór informacyjny:');
                $('#node'+idx+'td4').html('<select id="node'+idx+'group" style="width:50px" title="Wybierz grupę dla węzła">'+getGroups(idx)+'</select>');
                $('#node'+idx+'td5').html('Akcje:');
                $('#node'+idx+'td6').html('<table id="node'+idx+'actions" class="actions_table"></table><a id="node'+idx+'action_add" class="content_option" href="#" title="Dodaj nową akcję"><img class="option_img" src="/images/iAdd.png">dodaj akcję</a>');

                $('#node'+idx+'action_add').bind('click',function(){
                    addAction(idx,"player");
                    return false;
                });
                addAction(idx,"player");
                addAction(idx,"player");					
                addGroup(idx);
                addActionTarget(idx);						
                break;
            case "2":
                $('#node'+idx+'td3').html('');
                $('#node'+idx+'td4').html('');
                /*$('#node'+idx+'td4').html('<select id="node'+idx+'group" style="width:50px" title="Wybierz grupę dla węzła">'+getGroups(idx)+'</select>');*/						
                $('#node'+idx+'td5').html('Akcje:');
                $('#node'+idx+'td6').html('<table id="node'+idx+'actions" class="actions_table"></table><a id="node'+idx+'action_add" class="content_option" href="#" title="Dodaj nową akcję"><img class="option_img" src="/images/iAdd.png">dodaj akcję</a>');
						
                $('#node'+idx+'action_add').bind('click',function(){
                    addAction(idx,"nature");
                    return false;
                });
                addAction(idx,"nature");
                addAction(idx,"nature");
                //addGroup(idx);
                addActionTarget(idx);
                break;
            case "3":
                $('#node'+idx+'td3').html('');
                $('#node'+idx+'td4').html('');
                $('#node'+idx+'td5').html('Wypłata:');
                $('#node'+idx+'td6').html('1: <input id="node'+idx+'points1" type="text" size="5" title="Wprowadź punkty dla gracza 1" value="0" /> 2:<input id="node'+idx+'points2" type="text" size="5" title="Wprowadź punkty dla gracza 2" value="0" />');
						
                removeGroup(idx);
                addActionTarget(idx);						
                break;
        }
    }
			
    function getActionTargets(idx){
        var targets = "";
        for(var i=0;i<nodes.length;i++){
            if(nodes[i] != idx && $('#node'+nodes[i]+'type').val()!=-1){
                targets += "<option value="+nodes[i]+">"+nodes[i]+"</option>";
            }else{
                continue;	
            }
        }
        return targets;
    }
			

			
    function addAction(idx,type){
				
        var targets=getActionTargets(idx);
        //if(targets!=""){
        if($('#node'+idx+'actions tr').size()==6){
            alert('Błąd!\nWęzeł może posiadać max 6 akcji.');
            return;
        }

        var actionMax=getHighestActionId(idx);

        var aIdx=0;
        if(actionMax==-1){
            aIdx=1;
        }else{
            aIdx=++actionMax;
        }
				
        $('#node'+idx+'actions').append('<tr id="node'+idx+'action'+aIdx+'"><td class="action" style="display:none">'+aIdx+'</td><td><input id="node'+idx+'label'+aIdx+'" type="text" style="width:100px" value="akcja" title="Wprowadź nazwę akcji"/></td>'+(type=='nature'?'<td><input id="node'+idx+'probability'+aIdx+'" type="text" style="width:30px" value="0" maxlength="4" title="Wprowadź prawdopodobieństwo akcji"/></td>':'')+'<td><select id="node'+idx+'value'+aIdx+'" style="width:50px" title="Wybierz węzeł docelowy">'+targets+'</select></td><td><a id="node'+idx+'action'+aIdx+'delete" class="content_option" href="#" title="Usuń wybraną akcję"><img class="option_img" src="/images/iDel.png">usuń</a></td></tr>');
				
        $('#node'+idx+'action'+aIdx+'delete').unbind('click');
        $('#node'+idx+'action'+aIdx+'delete').bind('click',function(){
            removeAction(idx,aIdx);
            return false;
        });
				
    //}else{
    //alert('Błąd!\nNie można dodać akcji.\nBrak węzłów docelowych.');
    //}
    }

    function removeAction(idx,aIdx){
        $('#node'+idx+'action'+aIdx).remove();
    }				
			
    function addActionTarget(idx){
        for(var i=1;i<=getHighestId();i++){
            if(i!=idx){
                if($('#node'+i+'actions tr').size() > 0){
							
                    var actionMax=getHighestActionId(i);
                    if(actionMax==-1){
                        actionMax=1;
                    }
                    for(var j=1;j<=actionMax;j++){
                        var done=false;
                        $('#node'+i+'value'+j+' option').each(function(index){
                            if($(this).val()==idx){
                                done=true;
                                return false;
                            }
                            if($(this).val()>idx){ 
                                $(this).before('<option value="'+idx+'">'+idx+'</option');	
                                done=true; 
                                return false;
                            }
                        });
                        if(!done){
                            $('#node'+i+'value'+j).append('<option value="'+idx+'">'+idx+'</option');
                        }	
                    }
                }
            }
        }
    }
			
    function removeActionTarget(idx){
        for(var i=1;i<=getHighestId();i++){
            if($('#node'+i+'actions tr').size() > 0){
                var actionMax=getHighestActionId(i);
                if(actionMax==-1){
                    actionMax=1;
                }
                for(var j=1;j<=actionMax;j++){
                    $('#node'+i+'value'+j+' option[value="'+idx+'"]').remove();
                //if($('#node'+i+'value'+j+' option').size()==0){
                //	removeAction(i,j);
                //}		
                }
            }
        }
    }
			
    function validateData(){
        if(getHighestId()==0){
            alert('Błąd!\nBrak węzłów.\nDodaj wymagane informacje.');
            return false;
        }		
				
        for(var i=nodes[0];i<=getHighestId();i++){
            //sprawdzanie pustych wezlow
            if($('#node'+i+'type').val() == -1){
                alert('Węzeł '+i+': błąd!\nWybierz typ lub usuń węzeł.');
                return false;
            }
					
            //sprawdzanie typu wierzcholka
            if($('#node'+nodes[0]+'type').val()==-1 ||  $('#node'+nodes[0]+'type').val()==3){
                alert('Węzeł '+nodes[0]+': błąd!\nWierzchołek drzewa ma niepoprawny typ.\nZmień typ pierwszego węzła na liście na Gracz1,\nGracz2 lub Natura. Ewentualnie usuń węzeł.');
                return false;			
            }		
					
            //sprawdzanie wezlow bez akcji
            if($('#node'+i+'actions').size()){
                if($('#node'+i+'actions tr').size()==0 && $('#node'+i+'type').val()!=-1 && $('#node'+i+'type').val()!=3){
                    alert('Węzeł '+i+': błąd!\nIstnieją puste akcje.\nZdefiniuj akcje.');
                    return false;
                }
            }
        }
				

        for(var i=nodes[0];i<=getHighestId();i++){
            var error=false;
					
            //sprawdzanie czy akcje sie nie powtarzaja we wezle
            $('#node'+i+'actions tr').each(function(index){
                var actionMax=getHighestActionId(i);
                if(actionMax==-1){
                    actionMax=1;
                }
						
						
						
						
						
						
						
                var probsum=0;
                for(var j=1;j<=actionMax;j++){
							
										
                    //sprawdzanie prawdopodobienstwa czy jest floatem i czy jest w zakresie <0,1>	
                    if($('#node'+i+'type').val()==2){
                        if($('#node'+i+'probability'+j).size()!=""){
                            if(String($('#node'+i+'probability'+j).val()).match(/^-?[0-9]*\.?[0-9]+$/)==null) {
                                alert('Węzeł '+i+': błąd!\nNiepoprawny format liczby.\nNależy użyć kropki jako separatora.');
                                error=true;
                                return false;
                            }
                            if(parseFloat($('#node'+i+'probability'+j).val()) < 0 || parseFloat($('#node'+i+'probability'+j).val()) > 1){
                                alert('Węzeł '+i+': błąd!\nZakres prawdopodobieństwa wynosi <0,1>.\nPopraw dane.');
                                error=true;
                                return false;
                            }

                            $('#node'+i+'probability'+j).val(parseFloat($('#node'+i+'probability'+j).val()));
                            probsum+=parseFloat($('#node'+i+'probability'+j).val());
                        }
									
                    }	
							
                    //etykiety nie moga zawierac znaku % i nie moga byc puste
                    if($('#node'+i+'action'+j).text()!=""){
                        if(String($('#node'+i+'label'+j).val()).match(/%/)){
                            alert('Węzeł '+i+': błąd!\nAkcja zawiera niedozwolony znak %.\nPopraw dane.'); 
                            error=true;
                            return false;
                        }
                        if(String($('#node'+i+'label'+j).val())=="" || String($('#node'+i+'label'+j).val()).match(/^ *$/)){
                            alert('Węzeł '+i+': błąd!\nAkcja zawiera pustą etykietę.\nPopraw dane.'); 
                            error=true;
                            return false;
                        }
                    }
							
                    for(var k=1;k<=actionMax;k++){
                        if(j!=k){
                            if($('#node'+i+'action'+j).text()!=""){
								
                                if($('#node'+i+'value'+j).val()==$('#node'+i+'value'+k).val()){
                                    error=true;
                                    alert('Węzeł '+i+': błąd!\nIstnieją duplikaty akcji.\nUsuń akcję lub wybierz inny węzeł docelowy.');
                                    return false;
                                }
                            }
                        }
                    }
							
                    //sprawdzanie czy akcja sie nie powtarza z innymi wezlami (czy do jednego wezla prowadzi jedna sciezka)
                    for(var x=1;x<=getHighestId();x++){
                        if(x!=i){
                            $('#node'+x+'actions tr').each(function(index){
                                var actionMax1=getHighestActionId(x);
                                if(actionMax1==-1){
                                    actionMax1=0;
                                }
										
                                for(var k=1;k<=actionMax1;k++){									
											
                                    if($('#node'+i+'action'+j).text()!=""){	
                                        if($('#node'+i+'value'+j).val()==$('#node'+x+'value'+k).val()){
                                            error=true;
                                            alert('Błąd!\nIstnieją duplikaty akcji w różnych węzłach.\nUsuń akcję lub wybierz inny węzeł docelowy.');
                                            return false;
                                        }
                                        //sprawdzanie petli akcji np. 1-3 3-1
                                        if($('#node'+i+'value'+j).val()==$('#node'+x+'td1').text() && $('#node'+x+'value'+k).val()==$('#node'+i+'td1').text()){
                                            error=true;
                                            alert('Węzeł '+i+' i '+x+': błąd!\nIstnieje pętla pomiędzy węzłami.\nUsuń akcję lub wybierz inny węzeł docelowy.');
                                            return false;
                                        }
                                    }
                                }
                            });
                            if(error){
                                return false;
                            }
                        }
                    }
                }
            /*							
						if($('#node'+i+'type').val()==2){
							if(probsum!=1){
								error=true;
								alert('Węzeł '+i+': błąd!\nSuma prawdopodobieństw akcji powinna wynosić 1.\nPopraw dane.');
								return false;
							}
						}
                     */
            });
            if(error){
                return false;
            }
					
            //sprawdzanie czy punkty nie sa puste 
            if($('#node'+i+'type').val() == 3){					
                if($('#node'+i+'points1').val()=="" || $('#node'+i+'points2').val()==""){
                    alert('Węzeł '+i+': błąd!\nNiewypełnione pola dotyczące punktów.\nWpisz liczbę punktów.');
                    return false;
                } 
										
                //i czy sa prawidlową liczbą
                if(String($('#node'+i+'points1').val()).match(/^-?[0-9]*\.?[0-9]+$/)==null || String($('#node'+i+'points2').val()).match(/^-?[0-9]*\.?[0-9]+$/)==null){
                    alert('Węzeł '+i+': błąd!\nNiepoprawny format liczby.\nNależy użyć kropki jako separatora');
                    return false;
                }
						
                //poprawienie liczb np -.2 na -0.2 i 00000000000.1 na 0.1
                $('#node'+i+'points1').val(parseFloat($('#node'+i+'points1').val()));
                $('#node'+i+'points2').val(parseFloat($('#node'+i+'points2').val()));
            }
					
            //sprawdzenie gry wieloosobowej
            var count1=0;
            var count2=0;
            var count3=0;
            for(var w=1;w<=getHighestId();w++){
                if($('#node'+w+'type').val() == 0){
                    count1++;
                }
                if($('#node'+w+'type').val() == 1){
                    count2++;
                }
                if($('#node'+w+'type').val() == 3){
                    count3++;
                }
            }
            if(count1==0 || count2 ==0){
                alert('Błąd!\nNie istnieje węzeł gracza przeciwnego.\nDodaj węzeł przeciwnika.');
                return false;
            }
            if(count3==0){
                alert('Błąd!\nNie istnieje węzeł Punkty.\nDodaj odpowiedni węzeł.');
                return false;
            }
					
					
					
            //sprawdzanie czy wszystkie wezly maja 1 akcje wskazujaca na nie (oprocz wierzcholka)
            if(i!=nodes[0] && $('#node'+i).text()!=""){
                var count=0;	
                for(var x=1;x<=getHighestId();x++){
                    if(x!=i){
                        if($('#node'+x+'actions tr').size()>0){
                            var actionMax1=getHighestActionId(x);

                            if(actionMax1==-1){
                                actionMax1=1;
                            }
                            for(var k=1;k<=actionMax1;k++){
                                if($('#node'+i+'td1').text()==$('#node'+x+'value'+k).val()){
                                    count++;
                                }
                                if($('#node'+x+'value'+k).val()==nodes[0]){
                                    alert('Węzeł '+x+': błąd!\nNie może istnieć akcja do wierzchołka.\nPopraw dane.');
                                    return false;
                                }
                            }
                        }	
                    }
                }
                if(count !=1){
                    alert('Węzeł '+i+': błąd!\nNie istnieje akcja do tego węzła.\nPopraw dane.');
                    return false;
                }
            }
        }

        treeOK=true;
        generateTree();
        return true;
    }


			
    function generateTree(){
        $('#tree_preview').hide();
				
        var img='';
        switch($('#node'+nodes[0]+'type').val()){
            case "0":
                img='<img class="option_img" src="/images/iPlayer1.png">';
                break;
            case "1":
                img='<img class="option_img" src="/images/iPlayer2.png">';
                break;
            case "2":
                img='<img class="option_img" src="/images/iNature.png">';
                break;
        }
				
        $('#tree_preview').html('<table id="tree_node'+nodes[0]+'" class="tree_preview_table"><tr id="tree_node'+nodes[0]+'label"><td class="tree_preview_name" colspan="'+$('#node'+nodes[0]+'actions tr').size()+'">'+img+($('#node'+nodes[0]+'type option:selected').text()=="Natura"?'N':$('#node'+nodes[0]+'type option:selected').text()+' &raquo;'+$('#node'+nodes[0]+'group').val()+'&laquo;')+'</td></tr><tr id="tree_node'+nodes[0]+'actions"></tr></table>');				
				
        for(var i=0;i<=getHighestActionId(nodes[0]);i++){
            if($('#node'+nodes[0]+'value'+i).size()){
                if($('#node'+nodes[0]+'type').val()=="2"){
                    $('#tree_node'+nodes[0]+'actions').append('<td class="tree_preview_td" id="tree_node'+nodes[0]+'action'+$('#node'+nodes[0]+'value'+i).val()+'">|<br><img class="option_img" src="/images/iAction.png">'+$('#node'+nodes[0]+'label'+i).val()+'('+$('#node'+nodes[0]+'probability'+i).val()+')<br>|</td>');
                }else{
                    $('#tree_node'+nodes[0]+'actions').append('<td class="tree_preview_td" id="tree_node'+nodes[0]+'action'+$('#node'+nodes[0]+'value'+i).val()+'">|<br><img class="option_img" src="/images/iAction.png">'+$('#node'+nodes[0]+'label'+i).val()+'<br>|</td>');
                }
												
            }
        }
        for(var i=nodes[1];i<=nodes.length;i++){
            generateChildren(i);
        }
        $('#tree_preview').show();
    }
			
    function generateChildren(idx){
				
        var img='';
        switch($('#node'+idx+'type').val()){
            case "0":
                img='<img class="option_img" src="/images/iPlayer1.png">';
                break;
            case "1":
                img='<img class="option_img" src="/images/iPlayer2.png">';
                break;
            case "2":
                img='<img class="option_img" src="/images/iNature.png">';
                break;
        }
				
        for(var i=1;i<=getHighestId();i++){
            if($('#tree_node'+i+'action'+idx).text()!=""){
                $('#tree_node'+i+'action'+idx).append('<table class="tree_preview_'+($('#node'+idx+'type').val()=="3"?'points':'table')+'" id="tree_node'+idx+'">'+($('#node'+idx+'type').val()=="3"?'':'<tr id="tree_node'+idx+'label"><td class="tree_preview_name"'+' colspan="'+($('#node'+idx+'type').val()=="3"?2:$('#node'+idx+'actions tr').size())+'">'+img+($('#node'+idx+'type option:selected').text()=="Natura"?'N':$('#node'+idx+'type option:selected').text()+' &raquo;'+$('#node'+idx+'group').val()+'&laquo;</td></tr>'))+'<tr id="tree_node'+idx+'actions"></tr></table>');	
            }
        }
				
        if($('#node'+idx+'type').val()=="3"){
            $('#tree_node'+idx+'actions').append('<td class="tree_preview_td" id="tree_node'+idx+'points1"><img class="option_img" src="/images/iPlayer1.png">'+$('#node'+idx+'points1').val()+'</td><td class="tree_preview_td" id="tree_node'+idx+'points2"><img class="option_img" src="/images/iPlayer2.png">'+$('#node'+idx+'points2').val()+'</td>');
        }
				
        for(var i=0;i<=getHighestActionId(idx);i++){
            if($('#node'+idx+'value'+i).size()){
                if($('#node'+idx+'type').val()=="2"){
                    $('#tree_node'+idx+'actions').append('<td class="tree_preview_td" id="tree_node'+idx+'action'+$('#node'+idx+'value'+i).val()+'">|<br><img class="option_img" src="/images/iAction.png">'+$('#node'+idx+'label'+i).val()+'('+$('#node'+idx+'probability'+i).val()+')<br>|</td>');
                } else {
                    $('#tree_node'+idx+'actions').append('<td class="tree_preview_td" id="tree_node'+idx+'action'+$('#node'+idx+'value'+i).val()+'">|<br><img class="option_img" src="/images/iAction.png">'+$('#node'+idx+'label'+i).val()+'<br>|</td>');
                }
            }
        }
    }
});
